---
id: 数组
title: 数组
---

## 二分查找 （leetcode 704 题）

- **题目**  
  给定一个 n 个元素有序的（升序）整型数组 nums 和一个目标值 target ，写一个函数搜索 nums 中的 target，如果目标值存在返回下标，否则返回 -1。

- 示例 1:
  `输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4`  
  解释: 9 出现在 nums 中并且下标为 4

- 示例 2:
  `输入: nums = [-1,0,3,5,9,12], target = 2 输出: -1`  
  解释: 2 不存在 nums 中因此返回 -1

- 提示：  
  你可以假设 nums 中的所有元素是不重复的。
  n 将在 [1, 10000]之间。
  nums 的每个元素都将在 [-9999, 9999]之间。

```js
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function (nums, target) {};


// 解法一 时间复杂度是O(n)

var search = function (nums, target) {
    if(!Array.isArray(nums) && nums.length === 0) return -1;
    let i = 0;
    for(let k of nums){
        if(k === target) return i
        i++;
    }
    return -1;
};


// 解法二 时间复杂度是O(logn)

var search = function (nums, target) {
    if (!Array.isArray(nums) && nums.length === 0) return -1;
    let l = 0, r = nums.length - 1;
    while (l <= r) {
        const mid = parseInt(l + (r - l) / 2);
        if (nums[mid] === target) return mid;
        else if (nums[mid] > target) r = mid - 1;
        else l = mid + 1;
    }
    return -1;
};

```

- 适用场景 升序或降序的数组上。